package org.easy.eao;

import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 存取动作执行者注册机
 * 
 * @author Frank
 */
public class ActionRegister {
	
	private Map<Class<? extends Annotation>, Action<?>> actions = 
		new HashMap<Class<? extends Annotation>, Action<?>>();

	/**
	 * 登记 动作执行者 集合
	 * @param actions
	 */
	public void setActions(Collection<Action<?>> actions) {
		for (Action<?> action : actions) {
			this.actions.put(action.getAnnotationClass(), action);
		}
	}

	/**
	 * 获取目前登记的 动作执行者 集合
	 * @return
	 */
	public Collection<Action<?>> getActions() {
		return actions.values();
	}

	/**
	 * 登记 动作执行者
	 * @param action
	 */
	public void register(Action<?> action) {
		actions.put(action.getAnnotationClass(), action);
	}

	/**
	 * 检查指定 动作注释 是否有登记
	 * @param annotation
	 * @return
	 */
	public boolean containsAction(Annotation annotation) {
		return actions.containsKey(annotation.annotationType());
	}

	/**
	 * 获取指定 动作注释 对应的 动作执行者
	 * @param annotation
	 * @return
	 */
	public Action<?> getAction(Annotation annotation) {
		return actions.get(annotation.annotationType());
	}
}
